package org.example.myleet.p697;

public class Solution {
    /**
     * 143 ms
     * hash表，一记出现次数，二记起始位置，三记结束位置
     */
    public int findShortestSubArray(int[] nums) {
        int n = nums.length, maxD = 0, minLen = n;
        int[][] cache = new int[50000][3];
        for (int i=0; i<n; i++) {
            int num = nums[i];
            if (cache[num][0] == 0) {
                //记录首次出现位置
                cache[num][1] = i;
            }
            //记录该数字的度
            ++cache[num][0];
            //记录最后出现位置
            cache[num][2] = i;
            if (cache[num][0] > maxD) {
                //刷新最大的度，刷新最大度的最短子数组
                maxD = cache[num][0];
                minLen = cache[num][2] - cache[num][1] + 1;
            } else if (cache[num][0] == maxD) {
                //度相同，刷新最大度的最短子数组
                minLen = Math.min(minLen, cache[num][2] - cache[num][1] + 1);
            }
        }
        return minLen;
    }
}
